package com.yuexiang.melodyhub.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuexiang.melodyhub.common.dto.user.UserAdd.param.UserAddParam;
import com.yuexiang.melodyhub.common.dto.user.UserFindByEmail.param.UserFindByEmailParam;
import com.yuexiang.melodyhub.common.dto.user.UserFindByEmail.response.UserFindByEmailResponse;
import com.yuexiang.melodyhub.common.dto.user.UserFindWithRolesByUsername.param.UserFindWithRolesByUsernameParam;
import com.yuexiang.melodyhub.common.dto.user.UserFindWithRolesByUsername.response.UserFindWithRolesByUsernameResponse;
import com.yuexiang.melodyhub.user.dto.UserChangeUserStatusByUserId.UserChangeUserStatusByUserIdParam;
import com.yuexiang.melodyhub.user.dto.UserDeleteUserByUserId.param.UserDeleteUserByUserIdParam;
import com.yuexiang.melodyhub.user.dto.UserGetBasicInfos.response.UserGetBasicInfosResponse;
import com.yuexiang.melodyhub.user.dto.UserUpdatePassword.param.UserUpdatePasswordParam;
import com.yuexiang.melodyhub.user.dto.UserUpdateUserInfos.param.UserUpdateUserInfosParam;
import com.yuexiang.melodyhub.user.entity.UserEntity;

public interface UserService extends IService<UserEntity> {

    void add(UserAddParam userParam);

    UserFindWithRolesByUsernameResponse findWithRolesByUsername(UserFindWithRolesByUsernameParam userFindWithRolesByUsernameParam);

    UserFindByEmailResponse findByEmail(UserFindByEmailParam userFindByEmailParam);

    void saveLastTimeByEmail(String email);

    void changeUserStatusByUserId(UserChangeUserStatusByUserIdParam param);

    void deleteUserByUserId(UserDeleteUserByUserIdParam param);

    UserGetBasicInfosResponse getBasicInfos(String email);

    void updateUserInfos(UserUpdateUserInfosParam param);

    void updatePassword(UserUpdatePasswordParam param);
}
